
// setupconfig.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"

#include "setupconfig.h"
#include "setupconfigDlg.h"

#include "MainDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CSetupconfigApp

BEGIN_MESSAGE_MAP(CSetupconfigApp, CWinAppEx)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CSetupconfigApp construction

CSetupconfigApp::CSetupconfigApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}


// The one and only CSetupconfigApp object

CSetupconfigApp theApp;


void strip(std::string & str, const char * end)
{
	size_t len = strlen(end);
	if(str.size() > len) str.resize(str.size()-len);
}


// CSetupconfigApp initialization

BOOL CSetupconfigApp::InitInstance()
{
	// InitCommonControlsEx() is required on Windows XP if an application
	// manifest specifies use of ComCtl32.dll version 6 or later to enable
	// visual styles.  Otherwise, any window creation will fail.
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// Set this to include all the common control classes you want to use
	// in your application.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinAppEx::InitInstance();

	// Standard initialization
	// If you are not using these features and wish to reduce the size
	// of your final executable, you should remove from the following
	// the specific initialization routines you do not need
	// Change the registry key under which our settings are stored
	// TODO: You should modify this string to be something appropriate
	// such as the name of your company or organization

	SetRegistryKey(_T("CppScriptConfig"));

	HKEY key;

	RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\CppScriptConfig", 0, KEY_READ, &key );
	DWORD type;
	BYTE path[MAX_PATH] = "";
	DWORD path_size = sizeof(path);
	RegQueryValueExA(key, "Path", NULL, &type, path, &path_size);
	RegCloseKey(key);

	try
	{
		std::string vs_dir = getenv("VS90COMNTOOLS");
		strip(vs_dir, "Common7\\Tools\\");

		var config = map().extend
				("INCLUDE", var((const char*)path)+"\\include" )
				("LIB", var((const char*)path)+"\\lib" )
				("PATH", "")
				("COMPILE", "g++ -o %s -c %s")
				("LINK", "g++ -o %s %s -ldynamic")
				("mingw", "C:\\MinGW")
				("msvcdir", vs_dir);

		config += +read_user_config("cppscript", config);

		config["install_path"] = (char*)path;

		CMainDlg dlg;
		// CSetupconfigDlg dlg(config);

		m_pMainWnd = &dlg;

		INT_PTR nResponse = dlg.DoModal();

		if (nResponse == IDOK)
		{
			write_user_config("cppscript", config);
		}
	}
	catch(...)
	{
		AfxMessageBox("Unhandled exception", MB_OK|MB_ICONWARNING);
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}
